package controller;

import DAO.DAOFactory;
import entidade.Aluno;
import entidade.AnamnesePerg;
import entidade.AnamneseResp;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ViewScoped;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import org.primefaces.context.RequestContext;
import org.primefaces.event.FlowEvent;

/**
 *
 * @author Thais
 */
@ManagedBean
@ViewScoped
public class AnamneseController implements Serializable {

    private AnamnesePerg pergunta;
    private AnamneseResp resposta;
    private String pergTela;
    List<AnamneseResp> respostas = new ArrayList<AnamneseResp>();
    List<AnamnesePerg> perguntas;
    List<AnamnesePerg> perguntasTodas;
    List<AnamnesePerg> perguntas1;
    List<AnamnesePerg> perguntas2;
    List<AnamnesePerg> perguntas3;
    List<AnamnesePerg> perguntas4;
    private boolean skip;
    private Aluno alunoSelecionado;
    private String mensagem;
    private String cabecalhoMsg;

    public AnamneseController() {

        HttpServletRequest req = (HttpServletRequest) FacesContext.getCurrentInstance().getExternalContext().getRequest();
        HttpSession session = req.getSession();
        alunoSelecionado = (Aluno) session.getAttribute("alunoSelecionado");

        perguntas = DAOFactory.obterAnamnesePerguntaDAO().listarPerguntas();
        perguntasTodas = perguntas;
        perguntas1 = new ArrayList<AnamnesePerg>();
        perguntas2 = new ArrayList<AnamnesePerg>();
        perguntas3 = new ArrayList<AnamnesePerg>();

        for (AnamnesePerg anamnesePerg : perguntas) {
            switch (anamnesePerg.getCategoria()) {
                case "1":
                    perguntas1.add(anamnesePerg);
                    break;
                case "2":
                    perguntas2.add(anamnesePerg);
                    break;
                case "3":
                    perguntas2.add(anamnesePerg);
                    break;
                case "4":
                    perguntas3.add(anamnesePerg);
                    break;
            }
        }
    }

    public String getPergTela() {
        return pergTela;
    }

    public void setPergTela(String pergTela) {
        this.pergTela = pergTela;
    }

    public AnamnesePerg getPergunta() {
        return pergunta;
    }

    public void setPergunta(AnamnesePerg pergunta) {
        this.pergunta = pergunta;
    }

    public AnamneseResp getResposta() {
        return resposta;
    }

    public void setResposta(AnamneseResp resposta) {
        this.resposta = resposta;
    }

    public List<AnamnesePerg> getPerguntas() {
        return perguntas;
    }

    public void setPerguntas(List<AnamnesePerg> perguntas) {
        this.perguntas = perguntas;
    }

    public Aluno getAlunoSelecionado() {
        return alunoSelecionado;
    }

    public void setAlunoSelecionado(Aluno alunoSelecionado) {
        this.alunoSelecionado = alunoSelecionado;
    }

    public String getMensagem() {
        return mensagem;
    }

    public void setMensagem(String mensagem) {
        this.mensagem = mensagem;
    }

    public String getCabecalhoMsg() {
        return cabecalhoMsg;
    }

    public void setCabecalhoMsg(String cabecalhoMsg) {
        this.cabecalhoMsg = cabecalhoMsg;
    }

    public boolean isSkip() {
        return skip;
    }

    public void setSkip(boolean skip) {
        this.skip = skip;
    }

    public String onFlowProcess(FlowEvent event) {
        String step = event.getNewStep();

        if (skip) {
            skip = false;   //reset in case user goes back  
            return "confirm";
        } else {
            return event.getNewStep();
        }
    }

    public void pergParq() {
        perguntas = perguntas1;

        if (!perguntas.isEmpty()) {
            pergTela = perguntas.get(0).getDescricao();
            RequestContext context = RequestContext.getCurrentInstance();
            context.execute("PF('dialogPerg').show()");
        }
    }

    public void pergACSM() {
        perguntas = perguntas2;

        if (!perguntas.isEmpty()) {
            pergTela = perguntas.get(0).getDescricao();
            RequestContext context = RequestContext.getCurrentInstance();
            context.execute("PF('dialogPerg').show()");
        }
    }

    public void pergOrie() {
        perguntas = perguntas3;

        if (!perguntas.isEmpty()) {
            pergTela = perguntas.get(0).getDescricao();
            RequestContext context = RequestContext.getCurrentInstance();
            context.execute("PF('dialogPerg').show()");
        }
    }

    public void sim() {
        resposta = new AnamneseResp();
        resposta.setAluno(alunoSelecionado);
        resposta.setDataAnamnese(new Date());
        resposta.setAnamnesePerg(perguntas.get(0));
        resposta.setDescricao(true);
        respostas.add(resposta);
        perguntas.remove(0);

        if (!perguntas.isEmpty()) {
            pergTela = perguntas.get(0).getDescricao();
            RequestContext context = RequestContext.getCurrentInstance();
            context.execute("PF('dialogPerg').show()");
        }
    }

    public void nao() {
        resposta = new AnamneseResp();
        resposta.setAluno(alunoSelecionado);
        resposta.setDataAnamnese(new Date());
        resposta.setAnamnesePerg(perguntas.get(0));
        resposta.setDescricao(false);
        respostas.add(resposta);
        perguntas.remove(0);

        if (!perguntas.isEmpty()) {
            pergTela = perguntas.get(0).getDescricao();
            RequestContext context = RequestContext.getCurrentInstance();
            context.execute("PF('dialogPerg').show()");
        }
    }

    public void salvarAnamnese() {
        boolean marcou;

        if (respostas.size() == perguntasTodas.size()) {
            boolean deuCerto = DAOFactory.obterAnamneseRespostaDAO().salvarRespostas(respostas);
            if (deuCerto) {
                mensagem = "Anamnese salva com sucesso!";
            } else {
                mensagem = "Erro ao salvar anamnese!";
            }
        } else {
            mensagem = "Não foram respondidas todas as perguntas";
        }

        cabecalhoMsg = "Anamnese";
        RequestContext context = RequestContext.getCurrentInstance();
        context.execute("PF('dlg').show()");
    }
}